package cn.tedu.oop3;
/**本类用作多态的入门案例*/
public class TestDemo {
    public static void main(String[] args) {
        //6.创建纯纯的对象用于测试
        Animal a=new Animal();
        Cat c=new Cat();
        Dog d=new Dog();
        a.eat();
        c.eat();
        d.eat();
        /**2.父类对象不可以使用子类的特有功能*/
        c.jump();
        d.run();

        //7.创建多态对象进行测试
        /**3.口诀1：父类引用指向子类对象
         * 解释：创建出来的子类对象的地址值，交给父类类型的引用类型变量来保存*/
        Animal a2=new Cat();
        Animal a3=new Dog();
        /**4.口诀2：编译看左边，运行看右边
         * 解释：必须要在父类中定义这个方法，才能通过编译，把多态对象看作是父类类型
         * 必须要在子类中重写这个方法，才能满足多态，实际干活的是子类
         * 多态对象使用的是父类的定义，子类的方法体*/
        a2.eat();
        a3.eat();

    }
}
/**1.多态的前提：继承+重写*/
//1.创建父类
class Animal{
    //3.创建父类的普通方法
    public void eat(){
        System.out.println("小动物Animal吃啥都行~");
    }

}
//2.1创建子类1小猫类
class Cat extends Animal{
    @Override
    public void eat(){
        System.out.println("小猫爱吃小鱼干~");
    }
    //5.1添加子类的特有方法
    public void jump(){
        System.out.println("小猫Cat跳的老高了");
    }


}
//2.2创建子类2小狗类
class Dog extends Animal{
    @Override
    public void eat(){
        System.out.println("小狗爱啃肉骨头~");
    }
    //5.2添加子类的特有方法
    public void run(){
        System.out.println("小狗Dog跑的老快了了");
    }

}